package gao.xioalei.util;

import gao.xioalei.entity.Message;

import javax.websocket.EncodeException;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class WebSocketUtil {
    /**
     * 模拟存储   在线用户
     */
    public static final Map<String, Session> USERS_ONLINE = new ConcurrentHashMap<>();

    /**
     * 向所有在线用户发送消息(遍历 向每一个用户发送)
     *
     * @param message
     */
    public static void sendMessageToAllOnlineUser(Message message) {
        USERS_ONLINE.forEach((username, Session) -> sendMessage(Session, message));
    }

    /**
     * 向指定用户发送消息(根据session)
     *
     * @param session 用户session
     * @param message 发送消息内容
     */
    public static void sendMessage(Session session, Message message) {
        if (session == null) {
            return;
        }

        final RemoteEndpoint.Basic basic = session.getBasicRemote();
        if (basic == null) {
            return;
        }

        try {
            basic.sendObject(message);
           // basic.sendText(message);
        } catch (IOException | EncodeException e) {
            e.printStackTrace();
        }
    }

    /**
     * 向指定用户发送消息(根据userId)
     *
     * @param userId  用户Id
     * @param message 发送消息内容
     */
    public static void sendMessageToSomeone(String userId, Message message) {
        sendMessage(USERS_ONLINE.get(userId), message);
    }

}
